package photonpay

import (
	"encoding/json"
)

// PhotonPayRequest 光子易支付平台基础请求
type PhotonPayRequest struct {
	MerchantOrderNo string  `json:"merchantOrderNo"` // 商户订单号
	Amount          float64 `json:"amount"`          // 金额
	Currency        string  `json:"currency"`        // 货币类型
	Subject         string  `json:"subject"`         // 订单标题
	Body            string  `json:"body,omitempty"`  // 订单描述
}

// ToJSON 转换为JSON字符串
func (r *PhotonPayRequest) ToJSON() string {
	data, _ := json.Marshal(r)
	return string(data)
}

// PhotonPayResponse 光子易支付平台基础响应
type PhotonPayResponse struct {
	Code    int    `json:"code"`    // 响应码
	Message string `json:"message"` // 响应消息
	Data    struct {
		OrderNo         string  `json:"orderNo"`         // 平台订单号
		MerchantOrderNo string  `json:"merchantOrderNo"` // 商户订单号
		Amount          float64 `json:"amount"`          // 金额
		Currency        string  `json:"currency"`        // 货币类型
		Status          string  `json:"status"`          // 状态
		PayURL          string  `json:"payUrl"`          // 支付链接
	} `json:"data"`
}

// PhotonPayRefundRequest 光子易支付平台退款请求
type PhotonPayRefundRequest struct {
	MerchantOrderNo string  `json:"merchantOrderNo"` // 商户订单号
	OrderNo         string  `json:"orderNo"`         // 平台订单号
	RefundAmount    float64 `json:"refundAmount"`    // 退款金额
	Reason          string  `json:"reason"`          // 退款原因
}

// ToJSON 转换为JSON字符串
func (r *PhotonPayRefundRequest) ToJSON() string {
	data, _ := json.Marshal(r)
	return string(data)
}

// PhotonPayRefundResponse 光子易支付平台退款响应
type PhotonPayRefundResponse struct {
	Code    int    `json:"code"`    // 响应码
	Message string `json:"message"` // 响应消息
	Data    struct {
		RefundNo        string  `json:"refundNo"`        // 退款单号
		MerchantOrderNo string  `json:"merchantOrderNo"` // 商户订单号
		OrderNo         string  `json:"orderNo"`         // 平台订单号
		RefundAmount    float64 `json:"refundAmount"`    // 退款金额
		Status          string  `json:"status"`          // 状态
	} `json:"data"`
}

// PhotonPayQueryRequest 光子易支付平台查询请求
type PhotonPayQueryRequest struct {
	MerchantOrderNo string `json:"merchantOrderNo,omitempty"` // 商户订单号
	OrderNo         string `json:"orderNo,omitempty"`         // 平台订单号
}

// ToJSON 转换为JSON字符串
func (r *PhotonPayQueryRequest) ToJSON() string {
	data, _ := json.Marshal(r)
	return string(data)
}

// PhotonPayQueryResponse 光子易支付平台查询响应
type PhotonPayQueryResponse struct {
	Code    int    `json:"code"`    // 响应码
	Message string `json:"message"` // 响应消息
	Data    struct {
		OrderNo         string  `json:"orderNo"`         // 平台订单号
		MerchantOrderNo string  `json:"merchantOrderNo"` // 商户订单号
		Amount          float64 `json:"amount"`          // 金额
		Currency        string  `json:"currency"`        // 货币类型
		Status          string  `json:"status"`          // 状态
		PayTime         string  `json:"payTime"`         // 支付时间
	} `json:"data"`
}

// PhotonPayNotify 光子易支付平台回调通知
type PhotonPayNotify struct {
	OrderNo         string  `json:"orderNo"`         // 平台订单号
	MerchantOrderNo string  `json:"merchantOrderNo"` // 商户订单号
	Amount          float64 `json:"amount"`          // 金额
	Currency        string  `json:"currency"`        // 货币类型
	Status          string  `json:"status"`          // 状态
	PayTime         string  `json:"payTime"`         // 支付时间
	Sign            string  `json:"sign"`            // 签名
}
